//package com.zxl.grocery.microservice.common.util.jwt;
//
//import com.zxl.grocery.microservice.common.constants.CommonConstants;
//import com.zxl.grocery.microservice.common.util.RsaKeyHelper;
//import com.zxl.grocery.microservice.common.util.StringHelper;
//import io.jsonwebtoken.*;
//import org.joda.time.DateTime;
//
///**
// * @Author: zxl
// * @Description: jwt工具类  将异常全部抛出去
// * @Date: Created in 17:19 2017/10/12
// * @Modified By:
// */
//public class JWTHelper {
//    private static RsaKeyHelper rsaKeyHelper = new RsaKeyHelper();
//    /**
//     * 密钥加密 生成token
//     *
//     * @param jwtInfo 需要放入jwt用户信息的对象
//     * @param priKeyPath 秘钥路径
//     * @param expire 失效时间 单位：秒
//     * @return
//     * @throws Exception
//     */
//    public static String generateToken(IJWTInfo jwtInfo, String priKeyPath, int expire) throws Exception {
////        生成对应json web token
//        String compactJws = Jwts.builder()
//                .setSubject(jwtInfo.getUniqueName())//设置用户登录名
////                可以有很多个claim,来存放自定义的信息
//                .claim(CommonConstants.JWT_KEY_USER_ID, jwtInfo.getId())//放入用户id
//                .claim(CommonConstants.JWT_KEY_NAME, jwtInfo.getName())//放入用户名
//                .setExpiration(DateTime.now().plusSeconds(expire).toDate())//设置过期时间
//                .signWith(SignatureAlgorithm.RS256, rsaKeyHelper.getPrivateKey(priKeyPath))//使用秘钥加密token
//                .compact();
//        return compactJws;
//    }
//
//    /**
//     * 公钥解析token
//     *
//     * @param token
//     * @param pubKeyPath 公钥路径
//     * @return
//     * @throws Exception
//     */
//    public static Jws<Claims> parserToken(String token, String pubKeyPath) throws Exception {
////        try {
////            通过反转，验证token是否符合
//            Jws<Claims> claimsJws = Jwts.parser().setSigningKey(rsaKeyHelper.getPublicKey(pubKeyPath)).parseClaimsJws(token);
//            return claimsJws;
////        } catch (SignatureException e){
////            可以打印一个token解析失败的logger
////            return null;
////        }
//    }
//
//    /**
//     * 获取token中的存放的信息
//     * iss: jwt签发者
//     * sub: jwt所面向的用户
//     * aud: 接收jwt的一方
//     * exp: jwt的过期时间，这个过期时间必须要大于签发时间
//     * nbf: 定义在什么时间之前，该jwt都是不可用的
//     * iat: jwt的签发时间
//     * jti: jwt的唯一身份标识，主要用来作为一次性token,从而回避重放攻击。
//     * @param token
//     * @param pubKeyPath 公钥路径
//     * @return
//     * @throws Exception
//     */
//    public static IJWTInfo getInfoFromToken(String token, String pubKeyPath) throws Exception {
//        Jws<Claims> claimsJws = parserToken(token, pubKeyPath);
////        if(claimsJws == null){
////            打印日志，没有获取到用户信息
////            return null;
////        }
//        Claims body = claimsJws.getBody();
//        // TODO: 扩展其它操作等
//        return new JWTInfo(body.getSubject(), StringHelper.getObjectValue(body.get(CommonConstants.JWT_KEY_USER_ID)), StringHelper.getObjectValue(body.get(CommonConstants.JWT_KEY_NAME)));
//    }
//
//}
